﻿// 801 求树上路径.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>


using namespace std;
/*
http://oj.daimayuan.top/course/7/problem/527

给你一棵 n个节点的树（节点的编号为 1到 n）和树上的两个节点 u,v
，请求出从 u到 v的路径上经过的所有节点的编号。

输入格式
第一行一个整数 n表示节点数。

接下来 n−1行，每行两个整数 x,y表示 x号节点和 y号节点之间有一条边。

输入保证是一棵树。

接下来一行两个整数 u和 v
，表示我们要求的是从 u号节点到 v号节点的路径上经过的所有节点的编号。

输出格式
输出一行，表示从 u号节点到 v号节点的路径上经过的所有节点的编号，
从 u开始到 v结束，节点编号之间用一个空格隔开。

样例输入
4
1 2
1 3
3 4
2 4
样例输出
2 1 3 4
数据规模
对于所有数据，保证 1≤n≤106,1≤x,y,u,v≤n,u≠v,x≠y。
*/

int n, pre[100001]; int c[100001], l;
vector<int>  edges[100001];


void dfs( int x) {
	for (auto y:edges[x])
		if (y!= pre[x]) {
			pre[y] = x;
			dfs(y);
		}
}


int main()
{
	scanf("%d",&n);
	for (int i = 1; i < n; i++) {
		int x, y;
		scanf("%d%d",&x,&y);
		edges[x].push_back(y);
		edges[y].push_back(x);
	}

	int u, v;
	scanf("%d%d",&u,&v);
	pre[u] = -1;
	dfs(u);
	l = 0;
	for (int i = v; i != u; i = pre[i]) {
		c[++l] = i;
	}
	c[++l] = u; 
	for (int i = l; i; --i) {
		printf("%d ",c[i]);
	}
	return 0;
}

 